package com.rpframework.utils;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;

public class GsonUtils {
    public static long getLong(JsonObject jsonObject, String key, Long defaultValue) {
        JsonElement jsonElement = jsonObject.get(key);
        if (jsonElement == null) {
            return defaultValue;
        }

        return jsonElement.getAsLong();
    }

    public static Long getLong(JsonObject jsonObject, String key) {
        return getLong(jsonObject, key, 0L);
    }

    public static int getInt(JsonObject jsonObject, String key, Integer defaultValue) {
        JsonElement jsonElement = jsonObject.get(key);
        if (jsonElement == null) {
            return defaultValue;
        }

        return jsonElement.getAsInt();
    }

    public static int getInt(JsonObject jsonObject, String key) {
        return getInt(jsonObject, key, 0);
    }

    public static String getString(JsonObject jsonObject, String key, String defaultValue) {
        JsonElement jsonElement = jsonObject.get(key);
        if (jsonElement == null) {
            return defaultValue;
        }

        return jsonElement.getAsString();
    }

    public static String getString(JsonObject jsonObject, String key) {
        return getString(jsonObject, key, "");
    }

    public static Double getDouble(JsonObject jsonObject, String key, Double defaultValue) {
        JsonElement jsonElement = jsonObject.get(key);
        if (jsonElement == null) {
            return defaultValue;
        }

        return jsonElement.getAsDouble();
    }

    /**
     * 快速类型转换
     * JSON->ENTITY
     *
     * @param t    类型
     * @param json JSON
     * @param <T>  实体类型
     * @return 转换后数据
     */
    public static <T> T parse(Class<T> t, String json) {
        return parse(new TypeToken<T>() {
        }.getType(), json);
    }

    /**
     * 快速类型转换
     * JSON->ENTITY
     *
     * @param type 类型
     * @param json JSON
     * @param <T>  实体类型
     * @return 转换后数据
     */
    public static <T> T parse(Type type, String json) {
        try {
            Gson g = new Gson();
            return g.fromJson(json, type);
        } catch (Exception e) {
            throw new IllegalArgumentException("JSON转换失败", e);
        }
    }

    public static Double getDouble(JsonObject jsonObject, String key) {
        return getDouble(jsonObject, key, 0D);
    }

    public static void main(String[] args) {
        System.out.println(1 & 3);
        System.out.println(2 & 3);
        System.out.println(4 & 3);
    }
}
